package com.zuo_book.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zuo_book.common.Result;
import com.zuo_book.dto.UserInfoDTO;
import com.zuo_book.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 管理员用户控制器
 */
@RestController
@RequestMapping("/admin/user")
@RequiredArgsConstructor
@Slf4j
public class AdminUserController {

    private final UserService userService;

    /**
     * 分页查询用户列表
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @return 用户列表
     */
    @GetMapping("/list")
    public Result<Page<UserInfoDTO>> listUsers(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size,
            @RequestParam(required = false) String keyword) {
        Page<UserInfoDTO> userPage = userService.listUsers(page, size, keyword);
        return Result.success(userPage);
    }

    /**
     * 获取用户详情
     * @param userId 用户ID
     * @return 用户详情
     */
    @GetMapping("/{userId}")
    public Result<UserInfoDTO> getUserInfo(@PathVariable Long userId) {
        UserInfoDTO userInfo = userService.getUserInfo(userId);
        return Result.success(userInfo);
    }

    /**
     * 启用/禁用用户
     * @param userId 用户ID
     * @param status 状态 (0-禁用, 1-启用)
     * @return 结果
     */
    @PutMapping("/{userId}/status")
    public Result<Void> updateUserStatus(
            @PathVariable Long userId,
            @RequestParam Integer status) {
        userService.updateUserStatus(userId, status);
        return Result.success("更新状态成功");
    }
    
    /**
     * 更新用户角色
     * @param userId 用户ID
     * @param role 角色
     * @return 结果
     */
    @PutMapping("/{userId}/role")
    public Result<Void> updateUserRole(
            @PathVariable Long userId,
            @RequestParam String role) {
        log.info("更新用户角色: userId={}, role={}", userId, role);
        userService.updateUserRole(userId, role);
        return Result.success("更新角色成功");
    }
    
    /**
     * 更新用户信息
     * @param userId 用户ID
     * @param userInfoDTO 用户信息
     * @return 结果
     */
    @PutMapping("/{userId}")
    public Result<Void> updateUser(
            @PathVariable Long userId,
            @RequestBody UserInfoDTO userInfoDTO) {
        log.info("更新用户信息: userId={}, userInfo={}", userId, userInfoDTO);
        // 确保ID一致
        userInfoDTO.setId(userId);
        userService.updateUserInfo(userInfoDTO);
        return Result.success("更新用户信息成功");
    }
} 